\documentclass{llncs}

\usepackage{url}
\usepackage{microtype}
\usepackage[noend]{algorithmic}
\usepackage{fancyvrb}
\usepackage{xspace}
\usepackage{macros}
\usepackage{graphicx}
\usepackage{listings}
\lstnewenvironment{java}
{\lstset{
language=java,
basicstyle=\tt,
tabsize=2,
columns=fullflexible,
captionpos=b,
xleftmargin=2ex,
keywordstyle=\tt,
commentstyle=\small\sl,
numbers=left,
numberstyle=\footnotesize,
numbersep=5pt,
mathescape=true,
escapeinside={^(}{)^}
}}{}

\newcommand{\todo}[1]{\textcolor{red}{\textbf{[[#1]]}}}
%% To disable, just uncomment this line:
\renewcommand{\todo}[1]{\relax}

\newcommand{\mde}[1]{\todo{Mike: #1}}
\newcommand{\COMMENTJOHAN}[1]{\todo{Johan: #1}}
\newcommand{\alex}[1]{\todo{Alex: #1}}

\newcommand{\kw}[1]{{\texttt{\small #1}}}

\input{JavariMacros.tex}
\input{oigj-commands}

\newcommand{\mify}{modify\xspace}

\newcommand{\CC}{\code{C++}}

\newcommand{\ReadOnly}{\code{ReadOnly}}
\newcommand{\Mutable}{\code{Mutable}}
\newcommand{\Immutable}{\code{Immutable}}
\newcommand{\JoeImmutable}[1]{\ensuremath{#1}\texttt{*}}

% \renewcommand{\code}[1]{\texttt{\textup{\scriptsize #1}}}
\renewcommand{\code}[1]{\kw{#1}}
\newcommand{\lt}{\code{<}}
\newcommand{\gt}{\code{>}}
\newcommand{\hgn}[1]{\lt#1\gt} % for type parameters and generic method parameters
\newcommand{\keyword}[1]{\code{#1}}
\newcommand{\const}{\keyword{const}}
\renewcommand{\this}{\keyword{this}}
\renewcommand{\mutable}{\keyword{mutable}}
\renewcommand{\romaybe}{\keyword{romaybe}}
\newcommand{\AssignsFieldsAnnot}{\code{@AssignsFields}}
\newcommand{\IP}{\code{I}}
\newcommand{\myrule}[1]{\textsc{\small #1 Rule}}
\newcommand{\methodrule}{\myrule{Method-Invocation}}
\newcommand{\st}{\ensuremath{\mathrel{{\preceq}}}}
\newcommand{\ErasedSignatureRule}{\myrule{Erased-Signature}}

% Left and right curly braces in tt font
\newcommand{\ttlcb}{\texttt{\char "7B}}
\newcommand{\ttrcb}{\texttt{\char "7D}}
\newcommand{\lb}{\ttlcb}
\newcommand{\rb}{\ttrcb}

\newcommand{\Joe}[1][3]{\textsf{Joe}\ensuremath{_{#1}}\xspace}
\newcommand{\Joline}{\textsf{Joline}\xspace}

% At least 80% of every float page must be taken up by
% floats; there will be no page with more than 10% white space.
\def\topfraction{.9}
\def\dbltopfraction{\topfraction}
\def\floatpagefraction{\topfraction}     % default .5
\def\dblfloatpagefraction{\topfraction}  % default .5
\def\textfraction{.1}

\title{Immutability}

\author{Alex Potanin$^1$, Johan \"Ostlund$^2$, Yoav Zibin$^3$, Michael D. Ernst$^4$}

\institute{
$^1$ School of Engineering and Computer Science, VUW, Wellington, New Zealand\\
$^2$ Department of Information Technology, Uppsala University, Uppsala, Sweden\\
$^3$ Google New York, NY, USA\\
$^4$ Computer Science and Engineering, University of Washington, WA, USA
}

\begin{document}

\maketitle

\begin{abstract}
One of the main reasons aliasing has to be controlled, as highlighted
in another chapter~\cite{HoggLWdCHChapter} of this book
~\cite{AliasingBook}, is the possibility that a variable can unexpectedly change its value without the referrer's knowledge. This book will not be complete without a discussion of the impact of \textit{immutability} on reference-abundant imperative object-oriented languages. In this chapter we briefly survey possible definitions of immutability and present recent work by the authors on adding immutability to object-oriented languages and how it impacts aliasing.
\end{abstract}

\input{01-introduction}
\input{02-whats-immutability}
\input{03-current-state-of-immutability}
\input{04-why-immutability}
\input{05-tour-of-major-proposals}
\input{06-discussion}
\input{07-conclusion}

\bibliographystyle{splncs}
\bibliography{alex,bibstring-abbrev,igj-extra,abbrevs,biblio,fame,new,AliasingBook}

\end{document}

%%% Local Variables: 
%%% TeX-command-default: "PDF"
%%% End: 
